home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1996 #15
/
Monster Media Number 15 (Monster Media)(July 1996).ISO
/
pcboard
/
read100.zip
/
READ.PPE
(
.txt
)
< prev
next >
Wrap
PCBoard Programming Language Executable
|
1996-05-23
|
8KB
|
691 lines
;------------------------------------------------------------------------------
; .ss.
; `²²'
; .,sS$Ss,,s$ .,sS$$$Ss. .,sS$Ss,,s$ .ss. .sSs.
; .d$$²^°²$$$$'.d$P²°^^²$P'.d$$²^°²$$$$'.$$$' .$$$²Sb,.
; $$$' .$$$' $$$²Sçsµ²' .$$$' .$$$'.$$$' .$$$' `$$b.
; $$$b,,d$$$' ,$$$b,....,s$$$$b,,d$$$'.$$$;.,$$$' ;$$$
; `²S$$S²²S$$S²°²S$$$$S²°°²S$$$$$$',$$S²°²S$S'.sS$$$P²'
; .sS²°$$$²²°"' d²°'
; .$$² .$$'
; $$$.,d$$'
; `²S$$S²'
;------------------------------------------------------------------------------
; P.P.L.X. 2.OO (C)1996 - Lone Runner / AEGiS CoRP'96
;------------------------------------------------------------------------------
; PPE 3.3O (Encryption type II) - Analysis ON - Postprocessing ON
;------------------------------------------------------------------------------
Boolean BOOLEAN001
Boolean BOOLEAN002
Boolean BOOLEAN003
Integer INTEGER001
Integer INTEGER002
Integer INTEGER003
Integer INTEGER004
Integer INTEGER005
Integer INTEGER006
Integer INTEGER007
Integer INTEGER008
Integer INTEGER009
Integer INTEGER010
String STRING001
String STRING002
String STRING003
String STRING004
String STRING005
String STRING006
String STRING007
String STRING008
String STRING009
String STRING010
String STRING011
String STRING012
String STRING013
String STRING014
String TSTRING015(10)
String TSTRING016(10)
String STRING017
String STRING018
String STRING019
String STRING020
String STRING022
Declare Function FUNCTION001(String STRING021) String
Declare Procedure PROC001(Integer INTEGER011, Integer INTEGER012, Var Integer INTEGER013)
Declare Procedure PROC002(Integer INTEGER014)
;------------------------------------------------------------------------------
StartDisp 1
INTEGER007 = CurConf()
INTEGER008 = ReadLine(PCBDat(), 6)
INTEGER009 = ReadLine(PCBDat(), 7)
INTEGER006 = ReadLine(PCBDat(), 108)
INTEGER010 = ReadLine(PCBDat(), 131)
FCloseAll
FOpen 1, PPEPath() + "READ.CFG", 0, 0
FGet 1, STRING017
FGet 1, STRING018
FGet 1, STRING019
FGet 1, STRING020
FGet 1, STRING013
FGet 1, STRING014
FClose 1
STRING001 = PPEPath() + "READ" + String(PcbNode())
GetUser
Gosub LABEL019
BOOLEAN001 = 1
:LABEL001
If (TokCount() > 0) Then
STRING003 = Trim(Upper(GetToken()), " ")
Select Case (STRING003)
Case "A"
BOOLEAN001 = 1
BOOLEAN002 = 1
Newline
DispText 145, 256
INTEGER003 = U_Lmr(CurConf()) + 1
Case "L"
BOOLEAN001 = 0
INTEGER003 = HiMsgNum()
Case "Y"
BOOLEAN001 = 1
BOOLEAN003 = 1
INTEGER003 = U_Lmr(CurConf())
Case Else
If (InStr(STRING003, "-") > 0) Then
BOOLEAN001 = 0
INTEGER003 = S2I(Trim(StripStr(STRING003, "-"), " "), 10)
ElseIf (InStr(STRING003, "+") > 0) Then
BOOLEAN001 = 1
INTEGER003 = S2I(Trim(StripStr(STRING003, "+"), " "), 10)
Else
INTEGER003 = S2I(STRING003, 10)
Endif
Else
DispFile PPEPath() + "READMENU", 4
InputStr STRING018, STRING003, 7, 79, Mask_Ascii(), 256 + 8
Tokenize STRING003
If (Trim(STRING003, " ") == "") Then
PROC002(INTEGER007)
Endif
Goto LABEL001
Endif
End Select
:LABEL002
If (BOOLEAN003) Then
INTEGER003 = ScanMsgHdr(CurConf(), INTEGER003, 7, U_Alias)
If (INTEGER003 == -1) Then
PROC002(INTEGER007)
Endif
Endif
If (INTEGER003 > HiMsgNum()) Then
SetLmr CurConf(), HiMsgNum()
If (BOOLEAN002) Then
PROC001(CurConf(), INTEGER006, INTEGER003)
Endif
Endif
MsgToFile CurConf(), INTEGER003, STRING001
If (Exist(STRING001)) Goto LABEL004
If (INTEGER003 < LoMsgNum()) Then
If (BOOLEAN001) Then
INTEGER003 = INTEGER003 + 1
Goto LABEL002
Goto LABEL003
Endif
PROC002(INTEGER007)
Endif
:LABEL003
If (INTEGER003 > HiMsgNum()) Then
PROC002(INTEGER007)
Endif
If (BOOLEAN001) Then
INTEGER003 = INTEGER003 + 1
Else
INTEGER003 = INTEGER003 - 1
Endif
Goto LABEL002
:LABEL004
FOpen 2, STRING001, 0, 0
For INTEGER001 = 1 To 10
FGet 2, STRING003
STRING003 = FUNCTION001(STRING003)
If (INTEGER001 == 1) Then
STRING003 = Trim(STRING003, " ")
If (STRING003 == "") Then
STRING012 = "N/A"
Goto LABEL012
Endif
If (STRING003 == "*") Then
STRING012 = "NO"
If (BOOLEAN003) Goto LABEL006
If (CurSec() >= INTEGER009) Goto LABEL006
FClose 2
Delete STRING001
If (BOOLEAN001) Then
INTEGER003 = INTEGER003 + 1
Goto LABEL005
Endif
INTEGER003 = INTEGER003 - 1
:LABEL005
Goto LABEL002
:LABEL006
Goto LABEL012
Endif
If (STRING003 == "+") Then
STRING012 = "YES"
If (BOOLEAN003) Goto LABEL008
If (CurSec() >= INTEGER009) Goto LABEL008
FClose 2
Delete STRING001
If (BOOLEAN001) Then
INTEGER003 = INTEGER003 + 1
Goto LABEL007
Endif
INTEGER003 = INTEGER003 - 1
:LABEL007
Goto LABEL002
:LABEL008
Goto LABEL012
Endif
If (STRING003 == "-") Then
STRING012 = "YES"
Goto LABEL012
Endif
If (STRING003 == "~") Then
STRING012 = "NO"
If (CurSec() >= INTEGER008) Goto LABEL010
FClose 2
Delete STRING001
If (BOOLEAN001) Then
INTEGER003 = INTEGER003 + 1
Goto LABEL009
Endif
INTEGER003 = INTEGER003 - 1
:LABEL009
Goto LABEL002
:LABEL010
Goto LABEL012
Endif
If (STRING003 == "`") Then
STRING012 = "YES"
If (CurSec() >= INTEGER008) Goto LABEL012
FClose 2
Delete STRING001
If (BOOLEAN001) Then
INTEGER003 = INTEGER003 + 1
Goto LABEL011
Endif
INTEGER003 = INTEGER003 - 1
:LABEL011
Goto LABEL002
Endif
:LABEL012
Continue
Endif
If (INTEGER001 == 2) Then
STRING009 = STRING003
Continue
Endif
If (INTEGER001 == 3) Then
If (STRING003 == "0") Then
STRING010 = "NONE"
Goto LABEL013
Endif
STRING010 = STRING003
:LABEL013
Continue
Endif
If (INTEGER001 == 5) Then
STRING007 = STRING003
Continue
Endif
If (INTEGER001 == 6) Then
STRING008 = STRING003
Continue
Endif
If (INTEGER001 == 7) Then
STRING004 = STRING003
Continue
Endif
If (INTEGER001 == 9) Then
STRING005 = STRING003
Continue
Endif
If (INTEGER001 == 10) Then
STRING006 = STRING003
Endif
Next
If (INTEGER003 == ScanMsgHdr(CurConf(), INTEGER003, 10, "R")) Then
STRING011 = "YES"
Else
STRING011 = "NO"
Endif
Gosub LABEL022
While (STRING003 <> "Message Body:") Do
FGet 2, STRING003
EndWhile
DefColor
StartDisp 1
AnsiPos 0, 10
INTEGER004 = 10
:LABEL014
If (Ferr(2)) Goto LABEL015
FGet 2, STRING003
If (Left(STRING003, Len(STRING013)) == STRING013) Then
STRING003 = Right(STRING003, Len(STRING003) - Len(STRING013))
STRING003 = STRING014 + STRING003
Endif
PrintLn STRING003
INTEGER004 = INTEGER004 + 1
If (INTEGER004 == U_PageLen) Then
More
StartDisp 1
INTEGER004 = 1
Endif
Goto LABEL014
:LABEL015
FClose 2
Delete STRING001
STRING003 = ""
STRING012 = ReplaceStr(STRING017, "@CONF@", ConfInfo(CurConf(), 1))
InputStr STRING012, STRING003, 7, 79, Mask_Ascii(), 256 + 8
Select Case (StripStr(Left(StripStr(STRING003, " "), 1), " "))
Case ""
If (BOOLEAN001) Then
INTEGER003 = INTEGER003 + 1
Else
INTEGER003 = INTEGER003 - 1
Endif
Goto LABEL002
Case "+"
INTEGER003 = INTEGER003 + 1
BOOLEAN001 = 1
Goto LABEL002
Case "-"
INTEGER003 = INTEGER003 - 1
BOOLEAN001 = 0
Goto LABEL002
Case ">"
INTEGER006 = ReadLine(PCBDat(), 108)
FCloseAll
If (CurConf() == INTEGER006) Then
PrintLn "@X0CN@X04o @X0Cm@X04ore @X0Cc@X04onferences @X0Ci@X04n @X0Ct@X04hat @X0Cd@X04irection@X0C!"
Wait
Else
PROC001(CurConf(), INTEGER006, INTEGER003)
Endif
Goto LABEL002
Case "<"
INTEGER006 = -1
If (CurConf() == 0) Then
PrintLn "@X0CN@X04o @X0Cm@X04ore @X0Cc@X04onferences @X0Ci@X04n @X0Ct@X04hat @X0Cd@X04irection@X0C!"
Wait
Else
PROC001(CurConf(), INTEGER006, INTEGER003)
Endif
Goto LABEL002
Case "A"
Goto LABEL002
Case "D"
STRING002 = ""
If (OnLocal()) Then
InputText "@X0FC@X07apture @X0FF@X07ile @X0FP@X07ath@X08: _", STRING002, 7, 79
If (Right(STRING002, 1) == "\") Then
STRING002 = STRING002 + Strip(Left(String(INTEGER003), 8) + ".CAP", " ")
Else
STRING002 = STRING002 + "\" + Strip(Left(String(INTEGER003), 8) + ".CAP", " ")
Endif
Else
STRING002 = TempPath() + Strip(Left(String(INTEGER003), 8) + ".CAP", " ")
Endif
MsgToFile CurConf(), INTEGER003, STRING001
FOpen 2, STRING001, 0, 0
While (STRING003 <> "Message Body:") Do
FGet 2, STRING003
EndWhile
FOpen 3, STRING002, 1, 0
For INTEGER001 = 1 To INTEGER005
FPutLn 3, RTrim(TSTRING016(INTEGER001), " ")
Next
:LABEL016
If (Ferr(2)) Goto LABEL017
FGet 2, STRING003
FPutLn 3, StripAtx(STRING003)
Goto LABEL016
:LABEL017
FCloseAll
Delete STRING001
If (OnLocal()) Goto LABEL018
Shell 1, STRING003, "ZMSEND.EXE", STRING002
Delete STRING002
:LABEL018
Wait
Goto LABEL002
Case "R"
If (BOOLEAN001) Then
STRING003 = "+"
Else
STRING003 = "-"
Endif
STRING003 = String(INTEGER003) + STRING003
STRING002 = TempPath() + "CALLED." + String(PcbNode())
FOpen 3, STRING002, 1, 3
FPut 3, PPEPath() + PPEName() + ".PPE " + STRING003
FClose 3
If (INTEGER003 > U_Lmr(CurConf())) Then
SetLmr CurConf(), INTEGER003 - 1
Endif
PutUser
KbdStuff "REPLY " + String(INTEGER003) + "^M"
End
Case "L"
BOOLEAN001 = 0
INTEGER003 = HiMsgNum()
Goto LABEL002
Case "K"
If (CurSec() >= INTEGER010) Then
If ((INTEGER003 == ScanMsgHdr(CurConf(), INTEGER003, 7, U_Alias)) || (INTEGER003 == ScanMsgHdr(CurConf(), INTEGER003, 11, U_Alias))) Then
KillMsg CurConf(), INTEGER003
PrintLn STRING019 + String(INTEGER003)
If (BOOLEAN001) Then
INTEGER003 = INTEGER003 + 1
Else
INTEGER003 = INTEGER003 - 1
Endif
ElseIf (CurSec() == SysopSec()) Then
KillMsg CurConf(), INTEGER003
PrintLn STRING019 + String(INTEGER003)
If (BOOLEAN001) Then
INTEGER003 = INTEGER003 + 1
Else
INTEGER003 = INTEGER003 - 1
Endif
Else
PrintLn STRING020 + String(INTEGER003)
Goto LABEL002
Endif
Else
PrintLn STRING020 + String(INTEGER003)
Endif
Goto LABEL002
Case "P"
If (INTEGER003 > U_Lmr(CurConf())) Then
SetLmr CurConf(), INTEGER003
Endif
PutUser
Tokenize "ALL"
Call PPEPath() + "ENTER.PPE"
End
Case "Q"
PROC002(INTEGER007)
Case "?"
DispFile PPEPath() + "READHLP", 4
Goto LABEL002
Case Else
INTEGER003 = S2I(STRING003, 10)
Goto LABEL002
End Select
End
:LABEL019
FOpen 1, PPEPath() + "READHDR" + LangExt(), 0, 0
INTEGER001 = 1
:LABEL020
If (Ferr(1)) Goto LABEL021
FGet 1, TSTRING015(INTEGER001)
INTEGER001 = INTEGER001 + 1
Goto LABEL020
:LABEL021
FClose 1
INTEGER005 = INTEGER001 - 1
Return
:LABEL022
For INTEGER002 = 1 To INTEGER005
STRING003 = TSTRING015(INTEGER002)
STRING003 = ReplaceStr(STRING003, "@TO@", STRING004)
STRING003 = ReplaceStr(STRING003, "@FROM@", STRING005)
STRING003 = ReplaceStr(STRING003, "@SUBJECT@", STRING006)
STRING003 = ReplaceStr(STRING003, "@DATE@", STRING007)
STRING003 = ReplaceStr(STRING003, "@TIME@", STRING008)
STRING003 = ReplaceStr(STRING003, "@CURMSGNUM@", STRING009)
STRING003 = ReplaceStr(STRING003, "@HIGHMSGNUM@", String(HiMsgNum()))
STRING003 = ReplaceStr(STRING003, "@REPLYTO@", STRING010)
STRING003 = ReplaceStr(STRING003, "@READ@", STRING012)
STRING003 = ReplaceStr(STRING003, "@REPLIED@", STRING011)
PrintLn STRING003
TSTRING016(INTEGER002) = ScrText(1, GetY() - 1, 80, 0)
Next
Return
End
;------------------------------------------------------------------------------
Function FUNCTION001(String STRING021) String
Integer INTEGER011
FUNCTION001 = Right(STRING021, Len(STRING021) - 18)
If (Len(FUNCTION001) > 17) Then
FUNCTION001 = Left(FUNCTION001, 17)
Endif
EndFunc
;------------------------------------------------------------------------------
Procedure PROC001(Integer INTEGER011, Integer INTEGER012, Var Integer INTEGER013)
:LABEL023
If (INTEGER012 == -1) Then
Goto LABEL027
Endif
INTEGER011 = INTEGER011 + 1
:LABEL024
If (ConfSel(INTEGER011)) Goto LABEL026
INTEGER011 = INTEGER011 + 1
If (INTEGER011 >= INTEGER012) Then
If (BOOLEAN002) Goto LABEL025
PrintLn "@X0CN@X04o @X0Cm@X04ore @X0Cc@X04onferences @X0Ci@X04n @X0Ct@X04hat @X0Cd@X04irection@X0C!"
Wait
:LABEL025
PROC002(INTEGER007)
Endif
Goto LABEL024
:LABEL026
Goto LABEL029
:LABEL027
INTEGER011 = INTEGER011 - 1
:LABEL028
If (ConfSel(INTEGER011)) Goto LABEL029
INTEGER011 = INTEGER011 - 1
If (INTEGER011 <= 0) Then
PROC002(INTEGER007)
Endif
Goto LABEL028
:LABEL029
If (Strip(ConfInfo(INTEGER011, 1), " ") == "") Then
Newline
Print "@X0CD@X04e-selecting @X0Cn@X04on-existant @X0Cc@X04onference@X08: @X0F'@X0B" + String(INTEGER011) + "@X0F'"
Log "De-sel. non-existant conf.: '" + String(INTEGER011) + "'", 0
ConfUnflag INTEGER011, 4 + 1 + 2
SetLmr CurConf(), 0
PutUser
Goto LABEL023
Endif
Command 0, "JOIN " + String(INTEGER011) + ";Q"
INTEGER013 = U_Lmr(CurConf())
If (INTEGER013 >= HiMsgNum()) Then
DispText 78, 0
Goto LABEL023
Endif
EndProc
;------------------------------------------------------------------------------
Procedure PROC002(Integer INTEGER014)
If (INTEGER003 > U_Lmr(CurConf())) Then
SetLmr CurConf(), INTEGER003
Endif
If (INTEGER014 <> CurConf()) Then
Command 0, "JOIN " + String(INTEGER014) + ";Q"
Endif
PutUser
End
EndProc
;------------------------------------------------------------------------------
;
; Usage report (before postprocessing)
;
; ■ Statements used :
;
; 5 End
; 1 More
; 4 Wait
; 174 Goto
; 109 Let
; 1 Print
; 9 PrintLn
; 90 If
; 1 ConfUnflag
; 2 DispFile
; 6 FOpen
; 8 FClose
; 12 FGet
; 1 FPut
; 2 FPutLn
; 3 StartDisp
; 1 GetUser
; 4 PutUser
; 1 DefColor
; 7 Delete
; 1 Log
; 2 InputStr
; 2 Gosub
; 2 Return
; 2 Newline
; 2 Tokenize
; 1 Shell
; 2 DispText
; 1 InputText
; 1 KbdStuff
; 1 Call
; 1 AnsiPos
; 5 SetLmr
; 3 FCloseAll
; 2 EndProc
; 1 EndFunc
; 2 MsgToFile
; 2 Command
; 2 KillMsg
;
;
; ■ Functions used :
;
; 3 -
; 58 +
; 16 -
; 44 ==
; 3 <>
; 4 <
; 4 <=
; 9 >
; 13 >=
; 90 !
; 6 &&
; 4 ||
; 5 Len(
; 1 Upper()
; 18 Left()
; 3 Right()
; 3 Ferr()
; 2 InStr()
; 1 RTrim()
; 5 Trim()
; 1 StripAtx()
; 4 Strip()
; 16 String()
; 2 Mask_Ascii()
; 27 CurConf()
; 5 PCBDat()
; 7 PPEPath()
; 2 PcbNode()
; 5 ReadLine()
; 1 SysopSec()
; 2 OnLocal()
; 6 CurSec()
; 1 GetToken()
; 1 Exist()
; 4 S2I()
; 1 LangExt()
; 1 GetY()
; 1 PPEName()
; 2 TempPath()
; 1 TokCount()
; 1 ScrText()
; 11 ReplaceStr()
; 28 StripStr()
; 2 ConfSel()
; 6 U_Lmr()
; 1 LoMsgNum()
; 7 HiMsgNum()
; 4 ScanMsgHdr()
; 2 ConfInfo()
;
;------------------------------------------------------------------------------
;
; Analysis flags : FWSCds
;
; F - Change conference flags status ■ 2
; This may be normal for a SELECT replacement but it may also be
; a way to get access to conferences a user is not allowed to.
; ■ Search for : CONFFLAG, CONFUNFLAG
;
; W - Write user ■ 5
; Program writes a user record. Although this may be normal for a
; User Editor, it may also be a way to modify an account level.
; ■ Search for : PUTUSER
;
; S - Shell to DOS ■ 5
; This may be normal if the PPE need to execute an external command,
; but may be actually anything... nasty (formating HD, rebooting,...)
; or usefull (sorting, maintenance,...). Check!
; ■ Search for : SHELL
;
; C - Call child PPE ■ 3
; This is usually normal, but may be a tricky way to launch some
; sysop-only commands.
; ■ Search for : CALL
;
; d - Access PCBOARD.DAT ■ 2
; Program gets the full pathname to PCBOARD.DAT, this may be usefull
; for many PPE so they can find various informations on the system
; (system paths, max number of lines in messages, ...) but it may also
; be a way to gather vital informations.
; ■ Search for : PCBDAT()
;
; s - Sysop level access ■ 5
; Program is reading the sysop access level, this may be normal
; but still it is very suspect. It is the best way to give a user
; all priviledges. Check!
; ■ Search for : SYSOPSEC()
;
;------------------------------------------------------------------------------
;
; Postprocessing report
;
; 3 For/Next
; 2 While/EndWhile
; 55 If/Then or If/Then/Else
; 2 Select Case
;
;------------------------------------------------------------------------------
; AEGiS Corp - Break the routines, code against the machines!
;------------------------------------------------------------------------------